<test>
    <substitutions>
        <substitution>
            <name>serialization</name>
            <values>
                <value>sparse</value>
                <value>full</value>
            </values>
        </substitution>
        <substitution>
            <name>ratio</name>
            <values>
                <value>10</value>
                <value>100</value>
                <value>1000</value>
            </values>
        </substitution>
    </substitutions>

    <create_query>
        CREATE TABLE test_full_{ratio} (id UInt64, u8 UInt8, u64 UInt64, str String)
        ENGINE = MergeTree ORDER BY id
    </create_query>

    <create_query>
        CREATE TABLE test_sparse_{ratio} (id UInt64, u8 UInt8, u64 UInt64, str String)
        ENGINE = MergeTree ORDER BY id
        SETTINGS ratio_of_defaults_for_sparse_serialization = 0.8
    </create_query>

    <create_query>SYSTEM STOP MERGES test_{serialization}_{ratio}</create_query>

    <fill_query>
        INSERT INTO test_{serialization}_{ratio} SELECT
            number,
            number % {ratio} = 0 ? rand(1) : 0,
            number % {ratio} = 0 ? rand(2) : 0,
            number % {ratio} = 0 ? randomPrintableASCII(64, 3) : ''
        FROM numbers(100000000)
    </fill_query>

    <query>SELECT u8 FROM test_{serialization}_{ratio} FORMAT Null</query>
    <query>SELECT u64 FROM test_{serialization}_{ratio} FORMAT Null</query>
    <query>SELECT str FROM test_{serialization}_{ratio} FORMAT Null</query>

    <query>SELECT erf(u64) FROM test_{serialization}_{ratio} FORMAT Null</query>
    <query>SELECT lower(str) FROM test_{serialization}_{ratio} FORMAT Null</query>

    <query>SELECT id FROM test_{serialization}_{ratio} ORDER BY u64 DESC LIMIT 100 FORMAT Null</query>
    <query>SELECT id FROM test_{serialization}_{ratio} ORDER BY str DESC LIMIT 100 FORMAT Null</query>
    <query>SELECT id FROM test_{serialization}_{ratio} ORDER BY u8, u64 DESC LIMIT 100 FORMAT Null</query>
    <query>SELECT * FROM test_{serialization}_{ratio} ORDER BY u8, u64 DESC LIMIT 100 FORMAT Null</query>

    <query>SELECT sum(u64) FROM test_{serialization}_{ratio} GROUP BY id % 11 FORMAT Null</query>
    <query>SELECT uniq(str) FROM test_{serialization}_{ratio} GROUP BY id % 11 FORMAT Null</query>
    <query>SELECT sum(u64) FROM test_{serialization}_{ratio} FORMAT Null</query>
    <query>SELECT uniq(str) FROM test_{serialization}_{ratio} FORMAT Null</query>

    <query>SELECT count() FROM test_{serialization}_{ratio} WHERE u64 > 0</query>
    <query>SELECT count() FROM test_{serialization}_{ratio} WHERE notEmpty(str)</query>

    <drop_query>DROP TABLE IF EXISTS test_{serialization}_{ratio}</drop_query>
</test>
